package com.java.simple.study.juc.p6;

import lombok.extern.slf4j.Slf4j;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

/**
 * @author zhoujunlin
 * @date 2022年07月14日 22:31
 * @desc 测试SimpleDateFormat的线程不安全性
 */
@Slf4j(topic = "c.SimpleDateFormatTest")
public class SimpleDateFormatTest {

    public static void main(String[] args) throws ParseException {
        test3();
    }

    public static void test3() throws ParseException {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                try {
                    log.debug("解析出日期:{}", dateTimeFormatter.parse("2022-07-14", LocalDate::from));
                } catch (Exception e) {
                    log.error("日期解析出错", e);
                }
            }).start();
        }
    }

    public static void test2() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        for (int i = 0; i < 100; i++) {
            new Thread(() -> {
                synchronized (simpleDateFormat) {
                    try {
                        log.debug("解析出日期:{}", simpleDateFormat.parse("2022-07-14"));
                    } catch (Exception e) {
                        log.error("日期解析出错", e);
                    }
                }
            }).start();
        }
    }

    public static void test1() throws ParseException {
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        // 多个线程共享成员变量 calendar并修改
        //simpleDateFormat.format()
        for (int i = 0; i < 10; i++) {
            new Thread(() -> {
                try {
                    // 多个线程共享成员变量 calendar并修改
                    log.debug("解析出日期:{}", simpleDateFormat.parse("2022-07-14"));
                } catch (Exception e) {
                    log.error("日期解析出错", e);
                }
            }).start();
        }
    }


}
